package com.superkripts.sktools.value;

import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.util.SimpleLiteral;
import ch.njol.skript.util.Timespan;
import org.jetbrains.annotations.NotNull;

import java.lang.reflect.Array;
import java.lang.reflect.Parameter;

/**
 * 基础类型的默认值
 */
public class BaseDefaultValue extends CustomDefaultValue {

    @Override
    @NotNull
    public Expression<?> getDefaultValue(@NotNull Parameter parameter, @NotNull String value) {
        // 暂时只处理这些类型
        if (parameter.getType().isArray()) {
            // 数组 默认 空数组
            return new SimpleLiteral<>(Array.newInstance(parameter.getType().getComponentType(), 0), true);
        } else if (parameter.getType() == String.class) {
            return new SimpleLiteral<>(value, true);
        } else if (parameter.getType() == Integer.class) {
            return new SimpleLiteral<>(value.isEmpty() ? 0 : Integer.parseInt(value), true);
        } else if (parameter.getType() == Long.class) {
            return new SimpleLiteral<>(value.isEmpty() ? 0L : Long.parseLong(value), true);
        } else if (parameter.getType() == Float.class) {
            return new SimpleLiteral<>(value.isEmpty() ? 0.0F : Float.parseFloat(value), true);
        } else if (parameter.getType() == Double.class) {
            return new SimpleLiteral<>(value.isEmpty() ? 0.0 : Double.parseDouble(value), true);
        } else if (parameter.getType() == Boolean.class) {
            return new SimpleLiteral<>(!value.isEmpty() && Boolean.parseBoolean(value), true);
        } else if (parameter.getType() == Timespan.class && !value.isEmpty()) {
            return new SimpleLiteral<>(new Timespan(Long.parseLong(value)), true);
        }
        // 其他情况默认Null
        return new SimpleLiteral<>(new Object[0], true);
    }
}
